长大后想做什么?做回小孩!

0%

LeetCode——外观数列

NO.38 外观数列 简单

1Kc7Q0.png

这道题读题花了我好一会儿,最后还是在别人的帮助下理解题意。。。这个外观数列的意思是:第一项 “1”;第二项描述第一项:1个1,“11”;第三项描述第二项:2个1,“21”;第四项描述第三项:1个2和1个1,“1211”;第五项描述第四项:1个1和1个2和2个1,“111221”。。。。

思路一:按序生成每个数列 按顺序依次生成每个“外观数列”,其实就是BF。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public String countAndSay(int n) {
//第一项外观数列为"1"
if (n==1)return "1";
String s="1";
//按序生成n个外观数列,从第二项开始
for (int i=0;i<n-1;i++){
//temp是当前生成的外观数列、c初始化为前一项的第一个字符、count记录前一项连续相等的的字符
StringBuilder temp=new StringBuilder();
char c = s.charAt(0);
int count=1;
//遍历前一项外观数列的每个字符
for (int j=1;j<s.length();j++){
//如果连续的字符相等,则count计数器增加
if (c==s.charAt(j)){
count++;
}else {
//如果连续字符不相等,则将连续字符数量和字符拼接至temp
temp.append(count).append(c);
//c更新为当前遍历的字符,计数器重置为1
c=s.charAt(j);
count=1;
}
}
//注意,很容易遗漏的一步:将最后未拼接的字符加入temp
temp.append(count).append(c);
//更新s
s=temp.toString();
}
return s;
}

时间复杂度不会算。。。


本人菜鸟,有错误请告知,感激不尽!

更多题解和学习记录博客:博客github